即使捕获到控制器上的异常,java Grails Hibernate会话也会被清除。
我发现,如果grails服务出现任何问题并且未捕获异常,hibernate会话将被清除。我有一个用于所有控制器的拦截器,其中我有一个用于数据库事务的方法(这样做是错误的做法)。我的场景是这样的:
在AllInterceptor课堂上:
class AllInterceptor {
boolean before() {
def xyz = getValueFromDomain(session.domain);
def getValueFromDomain(def domain)
{
DomainB domainb
try{
def domainA = DomainA.findByUrl(domain)
if (domainA){
domainb = domainA.dwClient
}
}catch(Exception e){
log.warn("Exception occurred");
e.printStackTrace();
}
return domainb
}
}
}
在仪表板控制器上:
getChartData(){
def chartData = chartService.getChartData();
if(!chartData){
render (status : 204)
}else{
render chartData as JSON;
}}
在chartService:
getChartData(){
def chartData = '';
try{
throw new Exception();
}catch(Exception e){
}
return chartData;
}
在这里,异常已经在服务中捕获,并且在dashboard controller中也没有异常,但是当另一个控制器被调用时,异常会作为org抛出。冬眠HibernateException:在def xyz=getValueFromDomain(Session.domain)处未找到当前线程的会话
在这里,我不明白是什么导致hibernate会话被清除。如果服务中的异常未被捕获并被传播,但异常被捕获,则该异常将被清除。那么为什么要清除hibernate会话呢。请帮忙
共 (0) 个答案